<?php
/**
 * request辅助类
 *
 * @version $Id: IRequest.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.core
 */
class IRequest extends IObject {

	/**
	* 得到一个参数的值
	* 
	* @param string $varname 参数的名称
	* @return mixed 参数的值 
	* @see getParameter()
	*/
    public static function getPara($varname) {
		if (isset($_POST[$varname])) 
			return IRequest::strip($_POST[$varname]);
		if (isset($_GET[$varname])) 
			return IRequest::strip($_GET[$varname]);
        return null;
    }

	/**
	* 得到一个参数的值
	* 
	* @param string $varname 参数的名称
	* @return mixed 参数的值 
	* @see getPara()
	*/
    public static function getParameter($varname) {
		if (isset($_POST[$varname])) 
			return IRequest::strip($_POST[$varname]);
		if (isset($_GET[$varname])) 
			return IRequest::strip($_GET[$varname]);
        return null;
    }

	/**
	* 根据magic_quotes_gpc的值处理集合中的元素
	* 
	* 如果magic_quotes_gpc为1，则将一个集合中每个元素系统自动加的转义符去掉
	* 
	* @param string|array $vector 集合
	* @return  string|array 结果
	*/
    public static function strip($vector) {
        if (is_array($vector)) {
            foreach ($vector as $k=>$v) {
                $vector[$k] = IRequest::strip($v);
            }
        }
        else {
            if (IRequest::getMagic()) {
                $vector = stripslashes($vector);
            }
        }
        return $vector;
    }

	/**
	* 给一个集合的每一个元素加上转义符
	* 
	* @param array $vector 集合
	* @return  array 结果
	*/
    public static function addslash($vector) {
        if (is_array($vector)) {
            foreach ($vector as $k=>$v) {
                $vector[$k] = IRequest::addslash($v);
            }
        }
        else {		
			$vector = IRequest::_addslash($vector);
        }
        return $vector;
    }

	/**
	* 得到系统是否自动对传递的参数进行转义
	* 
	* @return boolean  
	*/
    public static function getMagic() {
        return get_magic_quotes_gpc();
    }
    
	/**
	* 得到客户端上传参数的方法
	* 
	* @return string 方法名称,皆为大写 
	*/
    public static function getMethod() {
    	if (isset($_SERVER["REQUEST_METHOD"])) {
        	return $_SERVER["REQUEST_METHOD"];
    	}
    	return null;
    }

	/**
	* 得到传入参数的名称的集合
	* 
	* @param string $method 传入方式,默认为REQUEST,不区分大小写 
	* @return array 集合 
	* @see getParaNames() 
	*/
    public static function getParameterNames($method = "REQUEST") {
        return array_keys($GLOBALS["_" . strToUpper($method)]);
    }
    
	/**
	* 得到传入参数的名称的集合
	* 
	* @param string $method 传入方式,默认为REQUEST,不区分大小写 
	* @return array 集合 
	* @see getParameterNames()
	*/
	public static function getParaNames($method = "REQUEST") {
        return array_keys($GLOBALS["_" . strToUpper($method)]);
    }

	/**
	* 得到传入参数的值的集合
	* 
	* @param String $method 传入方式,默认为REQUEST,不区分大小写 
	* @return array 集合 
	* @see getParaValues()
	*/
    public static function getParameterValues($method = "REQUEST")  {
        return array_values($GLOBALS["_" . strToUpper($method)]);
    }

	/**
	* 得到传入参数的值的集合
	* 
	* @param string $method 传入方式,默认为REQUEST,不区分大小写 
	* @return array 集合 
	* @see getParameterValues()
	*/
	public static function getParaValues($method = "REQUEST") {
        return array_values($GLOBALS["_" . strToUpper($method)]);
    }
    
    /**
    * 简洁的获取get方法提交过来的值
    * 
    * @param string $varname 变量的值
    * @param mixed $default 如未设定，则设为此默认值
    * @return mixed 变量的值
    */
    public static function get($varname, $default = null) {
    	return (isset($_GET[$varname]))?IRequest::strip($_GET[$varname]):$default;	
    }
    
    /**
    * 简洁的获取post方法提交过来的值
    * 
    * @param string $varname 变量的值
    * @param mixed $default 如未设定，则设为此默认值
    * @return mixed 变量的值
    */
    public static function post($varname, $default = null) {
    	return (isset($_POST[$varname]))?IRequest::strip($_POST[$varname]):$default;	
    }
    
    /**
    * 简洁的获取cookie方法提交过来的值
    * 
    * @param string $varname 变量的值
    * @param mixed $default 如未设定，则设为此默认值
    * @return mixed 变量的值
    */
    public static function cookie($varname, $default = null) {
    	return (isset($_COOKIE[$varname]))?IRequest::strip($_COOKIE[$varname]):$default;	
    }

	/**
	* 对addslashes处理中文字符出现错误的解决
	* 
	* @param boolean $escape: 是否对中文特殊处理，默认为false
	* @param string $string 要转义的字符串
	* @return string 转义后的字符串
	* @access private
	*/
	private static function _addslash($string, $escape = false) {
		if (!$escape) {
			return addslashes($string);
		}
		$string = ereg_replace("([^\xA1-\xFE])[\x5c]", "\\1\\", $string);
		$string = str_replace("\\", "\\\\", $string);
		$string = str_replace("'", "\\'", $string);
		$string = str_replace("\"", "\\\"", $string);	
		return $string;
	}
}

?>